%% -*- mode: erlang -*-
[
    {
        elvis,
        [
            {config, [
                #{
                    dirs => ["src", "apps/**/src"],
                    filter => "*.erl",
                    ruleset => erl_files,
                    rules => [
                        {elvis_style, no_throw, disable},
                        {elvis_style, param_pattern_matching, disable},
                        {elvis_style, macro_names, disable},
                        {elvis_style, macro_module_names, disable},
                        {elvis_style, function_naming_convention, disable},
                        {elvis_style, state_record_and_type, disable},
                        {elvis_style, export_used_types, disable},
                        {elvis_style, no_common_caveats_call, #{}},
                        {elvis_style, no_block_expressions, disable},
                        {elvis_style, no_import, disable},
                        {elvis_style, private_data_types, disable},
                        {elvis_style, max_function_arity, disable},
                        {elvis_style, no_debug_call, #{
                            debug_functions => [
                                {ct, pal},
                                {ct, print}
                            ]
                        }},
                        {elvis_style, operator_spaces, #{
                            rules => [
                                {right, "|"},
                                {left, "|"},
                                {right, "||"},
                                {left, "||"}
                            ]
                        }},
                        {elvis_style, dont_repeat_yourself, #{min_complexity => 20}},
                        {elvis_style, god_modules, #{limit => 100}},
                        % trust erlfmt
                        {elvis_text_style, line_length, #{
                            limit => 120,
                            skip_comments => false
                        }},
                        {elvis_style, no_block_expressions, disable}
                    ]
                },
                #{
                    dirs => ["test", "apps/**/test"],
                    filter => "*.erl",
                    rules => [
                        {elvis_text_style, line_length, #{
                            limit => 120,
                            skip_comments => false
                        }},
                        {elvis_style, dont_repeat_yourself, #{min_complexity => 100}},
                        {elvis_style, nesting_level, #{level => 6}}
                    ]
                },
                #{
                    dirs => ["apps/emqx_rule_engine/src"],
                    filter => "*_rule_funcs.erl",
                    rules => [
                        {elvis_style, god_modules, disable}
                    ]
                },
                #{
                    dirs => ["."],
                    filter => "Makefile",
                    ruleset => makefiles
                },
                #{
                    dirs => ["."],
                    filter => "rebar.config",
                    ruleset => rebar_config
                },
                #{
                    dirs => ["."],
                    filter => "elvis.config",
                    ruleset => elvis_config
                }
            ]}
        ]
    }
].
